우선순위 큐 BOJ 1826번 연료 채우기 파이썬 성경이는 트럭을 정글 속에서 운전하다가 트럭의 연료탱크에 갑자기 구멍이 나서 1km를 가는데 1L의 연료가 새 나가게 되었다. 이것을 고치기 위해서는 가장 가까운 마을에 가야 한다. 그런데 그냥 가다가는 중간에 연료가 다 빠질 수가 있다. 다행스럽게도 정글 곳곳에 연료를 채울 수 있는 주유소가 N개 있다. 그런데 정글 속에서 중간에 차를 멈추는 행위는 매우 위험한 행위이므로 주유소에서 멈추는... 백준알고리즘우선순위 큐그리디그리디 [C++] 백준 22254번: 공정 컨설턴트 호석 문제 링크 문제 요약 N개의 선물을 생산해야 한다. 각 선물은 여러 개의 생산라인에서 병렬 생산이 가능하다. 각 선물의 차례가 오면, 생산이 가장 빨리 끝나는 생산라인에 할당된다. 이때 모든 선물을 X시간 이내에 생산하기 위한 최소 생산라인의 수를 구해야 한다. 접근 방법 1 ~ 100000 사이를 매개변수 탐색하면서 생산라인의 수를 구합니다. 생산라인의 수가 적합한지 부적합한지는 우선순위 ... 우선순위 큐백준매개변수 탐색이분 탐색매개변수 탐색 BOJ1655 가운데를 말해요 왼쪽 힙은 현재 중간값보다 작은 값이 들어가는 최대 힙이고 오른쪽 힙은 현재 중간값보다 큰 값이 들어가는 최소 힙이다. 이때, 수학적인 정의에서는 수열의 원소의 개수가 짝수개일 경우, 가운데 위치한 값이 두 개이므로, 두 값의 평균을 중간값으로 취하게 되지만, 이 문제에서는 더 작은 값을 취하게 된다. 먼저, 맨 첫 값은 항상 왼쪽 힙에 들어가며, 중간 값은 그 값이 된다. 여기서 만약, 1... 자료구조우선순위 큐우선순위 큐 BOJ11003 최솟값 찾기 만약 배열이 [1, 5, 9, 9, 9]인 경우, 5를 담지 않는다면 윈도우가 1을 지나버리면 윈도우에는 5가 남아있지 않기 때문에 최솟값이 5임을 알 수 없다. 미래를 생각해보면, 2가 언젠가는 서브 배열의 최솟값이 된다. 그러면 그냥 윈도우에 지나가며 모든 값을 담고, 윈도우가 벗어난 값은 버리면 되는가? 바로 새로 들어온 값보다 큰 값이 있다면 그 값을 버리면 된다. 먼저, 현재 스텝에... 덱자료 구조우선순위 큐덱 1715번 카드 정렬하기 문제 출처 : 사고과정 처음에는 별생각없이 sort해서 앞에서부터 차례대로 더해나가면 되는거 아닌가 싶어서 짰지만 바로 '틀렸습니다' sort한다고 해도 묶음을 앞에서만 더했을 때 최솟값이 발생하는 게 아니란 걸 깨달았다. A,B,C,D,E...가 있다 치면 (A+B),(C+D),E... 이런 식으로 묶음을 비교할 수 있다. 일반화하여 생각해보면 결국 우리는 '최소한의 비교'를 해야하기 때문... 그리디 알고리즘우선순위 큐그리디 알고리즘 백준 문제 풀이 - 최대 힙 11279번 널리 잘 알려진 자료구조 중 최대 힙이 있다. 최대 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오. 배열에 자연수 x를 넣는다. 배열에서 가장 큰 값을 출력하고, 그 값을 배열에서 제거한다. 프로그램은 처음에 비어있는 배열에서 시작하게 된다. 최대힙을 구성해 최대값을 우선적으로 출력하자 Python에선 기본적으로 heapq라는 모듈을 지원한다. 다만 주의할 점은 heapq의... 자료 구조우선순위 큐우선순위 큐 최단 경로_다익스트라 가장 짧은 경로를 찾는 알고리즘 각 지점은 그래프에서 노드로 표현 특정한 노드에서 출발하여 다른 모든 노드로 가는 최단 경로 계산 다익스트라 알고리즘은 그리디 알고리즘으로 분류 매 상황에서 가장 비용이 적은 노드를 선택해 임의의 과정을 반복 다익스트라 알고리즘 동작 과정 살펴보기 그리디 알고리즘: 매 상황에서 방문하지 않은 가장 비용이 적은 노드를 선택 단계를 거치며 한 번 처리된 노드의 최... 알고리즘다익스트라최대 힙heap우선순위 큐최소 힙힙최단경로heap 백준 문제 풀이 - N번째 큰 수 2075번 N×N의 표에 수 N^2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=5일 때의 예를 보자. 이러한 표가 주어졌을 때, N번째 큰 수를 찾는 프로그램을 작성하시오. 표에 채워진 수는 모두 다르다. 총 N개의 문자를 가진 행이 N만큼 주어진다. N+1행의 각 숫자들은 N행의 각 숫자보다 크다. 위 값이 주어질 때 N번째 ... 자료 구조정렬우선순위 큐우선순위 큐 백준 1715번: 카드 정렬하기 문제 동적 집합에서 최소값/최대값을 반복적으로 활용할 때 우선순위 큐 활용하기 기록 포인트 동적 집합에서 최소값/최대값을 반복적으로 확인해야 할 때 우선순위 큐를 활용하는 방법 매번 전체 정렬을 할 필요 없이 최소값/최대값만 유지해주기 때문에 더 효율적임 그 대표적인 사례가 이번 문제임 여러 길이의 정렬된 카드 묶음 중 2개를 골라 하나의 묶음으로 합치는 작업을 반복함 이를 효율화하기 위해 ... 힙우선순위 큐우선순위 큐 [BOJ 1781] 컵라면 (Python) 같은 데드라인 문제들 중에서 받을 수 있는 컵라면 개수가 최대인 1문제를 선택해서 푸는 것으로 접근했다. 데드라인 마다 모든 문제들을 탐색하면 O(N²)으로 시간초과를 예상했다. 따라서 우선순위 큐를 이용하자는 생각을 하였고, 맞는 방법이었다. 이렇게 구현했지만 틀렸다. 올바른 로직이 아닌 것을 알 수 있었다. 위처럼 구현하게 되면 문제에 있는 입력 예제는 맞을 수 있으나 다른 예제에서 틀리... 알고리즘우선순위 큐그리디bojboj [백준] 7662번 이중 우선순위 큐 I, N이 주어지면 N 삽입 D, 1이 주어지면 최댓값 삭제 D, -1이 주어지면 최솟값 삭제 연산 후 최댓값, 최솟값 출력 heapq로 최대힙, 최소힙을 만든다 I, N일 때 양쪽에 모두 삽입 dict에 count += 1 D, 1일 때 최대 힙에서만 삭제 dict에 count -= 1 D, -1일 때 최소 힙에서만 삭제 dict에 count -= 1 pop pop으로 나온 노드가 coun... 알고리즘백준파이썬우선순위 큐백준 가운데를 말해요(백준 1655번 -파이썬) 다른 사람들 코드를 보니 maxheap과 minheap 두 개를 사용하여 풀었다. 수빈이가 정수를 하나씩 외칠때마다 동생은 지금까지 수빈이가 말한 수 중에서 중간값을 말해야 한다. 만약, 그동안 수빈이가 외친 수의 개수가 짝수개라면 중간에 있는 두 수 중에서 작은 수를 말해야 한다. 예를 들어 수빈이가 동생에게 1, 5, 2, 10, -99, 7, 5를 순서대로 외쳤다고 하면, 동생은 1, ... 백준알고리즘heap우선순위 큐heap
BOJ 1826번 연료 채우기 파이썬 성경이는 트럭을 정글 속에서 운전하다가 트럭의 연료탱크에 갑자기 구멍이 나서 1km를 가는데 1L의 연료가 새 나가게 되었다. 이것을 고치기 위해서는 가장 가까운 마을에 가야 한다. 그런데 그냥 가다가는 중간에 연료가 다 빠질 수가 있다. 다행스럽게도 정글 곳곳에 연료를 채울 수 있는 주유소가 N개 있다. 그런데 정글 속에서 중간에 차를 멈추는 행위는 매우 위험한 행위이므로 주유소에서 멈추는... 백준알고리즘우선순위 큐그리디그리디 [C++] 백준 22254번: 공정 컨설턴트 호석 문제 링크 문제 요약 N개의 선물을 생산해야 한다. 각 선물은 여러 개의 생산라인에서 병렬 생산이 가능하다. 각 선물의 차례가 오면, 생산이 가장 빨리 끝나는 생산라인에 할당된다. 이때 모든 선물을 X시간 이내에 생산하기 위한 최소 생산라인의 수를 구해야 한다. 접근 방법 1 ~ 100000 사이를 매개변수 탐색하면서 생산라인의 수를 구합니다. 생산라인의 수가 적합한지 부적합한지는 우선순위 ... 우선순위 큐백준매개변수 탐색이분 탐색매개변수 탐색 BOJ1655 가운데를 말해요 왼쪽 힙은 현재 중간값보다 작은 값이 들어가는 최대 힙이고 오른쪽 힙은 현재 중간값보다 큰 값이 들어가는 최소 힙이다. 이때, 수학적인 정의에서는 수열의 원소의 개수가 짝수개일 경우, 가운데 위치한 값이 두 개이므로, 두 값의 평균을 중간값으로 취하게 되지만, 이 문제에서는 더 작은 값을 취하게 된다. 먼저, 맨 첫 값은 항상 왼쪽 힙에 들어가며, 중간 값은 그 값이 된다. 여기서 만약, 1... 자료구조우선순위 큐우선순위 큐 BOJ11003 최솟값 찾기 만약 배열이 [1, 5, 9, 9, 9]인 경우, 5를 담지 않는다면 윈도우가 1을 지나버리면 윈도우에는 5가 남아있지 않기 때문에 최솟값이 5임을 알 수 없다. 미래를 생각해보면, 2가 언젠가는 서브 배열의 최솟값이 된다. 그러면 그냥 윈도우에 지나가며 모든 값을 담고, 윈도우가 벗어난 값은 버리면 되는가? 바로 새로 들어온 값보다 큰 값이 있다면 그 값을 버리면 된다. 먼저, 현재 스텝에... 덱자료 구조우선순위 큐덱 1715번 카드 정렬하기 문제 출처 : 사고과정 처음에는 별생각없이 sort해서 앞에서부터 차례대로 더해나가면 되는거 아닌가 싶어서 짰지만 바로 '틀렸습니다' sort한다고 해도 묶음을 앞에서만 더했을 때 최솟값이 발생하는 게 아니란 걸 깨달았다. A,B,C,D,E...가 있다 치면 (A+B),(C+D),E... 이런 식으로 묶음을 비교할 수 있다. 일반화하여 생각해보면 결국 우리는 '최소한의 비교'를 해야하기 때문... 그리디 알고리즘우선순위 큐그리디 알고리즘 백준 문제 풀이 - 최대 힙 11279번 널리 잘 알려진 자료구조 중 최대 힙이 있다. 최대 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오. 배열에 자연수 x를 넣는다. 배열에서 가장 큰 값을 출력하고, 그 값을 배열에서 제거한다. 프로그램은 처음에 비어있는 배열에서 시작하게 된다. 최대힙을 구성해 최대값을 우선적으로 출력하자 Python에선 기본적으로 heapq라는 모듈을 지원한다. 다만 주의할 점은 heapq의... 자료 구조우선순위 큐우선순위 큐 최단 경로_다익스트라 가장 짧은 경로를 찾는 알고리즘 각 지점은 그래프에서 노드로 표현 특정한 노드에서 출발하여 다른 모든 노드로 가는 최단 경로 계산 다익스트라 알고리즘은 그리디 알고리즘으로 분류 매 상황에서 가장 비용이 적은 노드를 선택해 임의의 과정을 반복 다익스트라 알고리즘 동작 과정 살펴보기 그리디 알고리즘: 매 상황에서 방문하지 않은 가장 비용이 적은 노드를 선택 단계를 거치며 한 번 처리된 노드의 최... 알고리즘다익스트라최대 힙heap우선순위 큐최소 힙힙최단경로heap 백준 문제 풀이 - N번째 큰 수 2075번 N×N의 표에 수 N^2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=5일 때의 예를 보자. 이러한 표가 주어졌을 때, N번째 큰 수를 찾는 프로그램을 작성하시오. 표에 채워진 수는 모두 다르다. 총 N개의 문자를 가진 행이 N만큼 주어진다. N+1행의 각 숫자들은 N행의 각 숫자보다 크다. 위 값이 주어질 때 N번째 ... 자료 구조정렬우선순위 큐우선순위 큐 백준 1715번: 카드 정렬하기 문제 동적 집합에서 최소값/최대값을 반복적으로 활용할 때 우선순위 큐 활용하기 기록 포인트 동적 집합에서 최소값/최대값을 반복적으로 확인해야 할 때 우선순위 큐를 활용하는 방법 매번 전체 정렬을 할 필요 없이 최소값/최대값만 유지해주기 때문에 더 효율적임 그 대표적인 사례가 이번 문제임 여러 길이의 정렬된 카드 묶음 중 2개를 골라 하나의 묶음으로 합치는 작업을 반복함 이를 효율화하기 위해 ... 힙우선순위 큐우선순위 큐 [BOJ 1781] 컵라면 (Python) 같은 데드라인 문제들 중에서 받을 수 있는 컵라면 개수가 최대인 1문제를 선택해서 푸는 것으로 접근했다. 데드라인 마다 모든 문제들을 탐색하면 O(N²)으로 시간초과를 예상했다. 따라서 우선순위 큐를 이용하자는 생각을 하였고, 맞는 방법이었다. 이렇게 구현했지만 틀렸다. 올바른 로직이 아닌 것을 알 수 있었다. 위처럼 구현하게 되면 문제에 있는 입력 예제는 맞을 수 있으나 다른 예제에서 틀리... 알고리즘우선순위 큐그리디bojboj [백준] 7662번 이중 우선순위 큐 I, N이 주어지면 N 삽입 D, 1이 주어지면 최댓값 삭제 D, -1이 주어지면 최솟값 삭제 연산 후 최댓값, 최솟값 출력 heapq로 최대힙, 최소힙을 만든다 I, N일 때 양쪽에 모두 삽입 dict에 count += 1 D, 1일 때 최대 힙에서만 삭제 dict에 count -= 1 D, -1일 때 최소 힙에서만 삭제 dict에 count -= 1 pop pop으로 나온 노드가 coun... 알고리즘백준파이썬우선순위 큐백준 가운데를 말해요(백준 1655번 -파이썬) 다른 사람들 코드를 보니 maxheap과 minheap 두 개를 사용하여 풀었다. 수빈이가 정수를 하나씩 외칠때마다 동생은 지금까지 수빈이가 말한 수 중에서 중간값을 말해야 한다. 만약, 그동안 수빈이가 외친 수의 개수가 짝수개라면 중간에 있는 두 수 중에서 작은 수를 말해야 한다. 예를 들어 수빈이가 동생에게 1, 5, 2, 10, -99, 7, 5를 순서대로 외쳤다고 하면, 동생은 1, ... 백준알고리즘heap우선순위 큐heap